МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра БІТ
/
Звіт до лабораторної роботи №5
З КУРСУ «ОПЕРАЦІЙНІ СИСТЕМИ»
Варіант 14
Мета роботи:
Ознайомлення з методами вирішення проблеми синхронізації потоків в C#, отримання практичних навичок виправлення помилок синхронізації в багатопотокових застосуваннях, створених на платформі .NET .
Завдання
Для вивчення основних можливостей службового застосування "Редактор Реєстру" виконати наступне.
Побудувати алгоритм програми, яка вирішує завдання оптимізації виконання певних операцій над матрицями з використанням багатопотоковості. Завдання наведені в таблиці відповідно до варіанту.
Використовуючи засоби VisualStudio(C#, C++, …) створіть програму, що вирішує дане завдання (в консольному чи WinForms режимі).
№ вар.
Кількість потоків
Завдання
10
3
Сума 2-х матриць (3x3).
Код програми
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace lab4
{
class ThreadClass
{
SemaphoreSlim sem = new SemaphoreSlim(7);
int[,] c = new int[4, 4];
int[,] a = { { 1, 1, 1, 1}, { 2, 2, 2, 2}, { 3, 3, 3, 3}, { 4, 4, 4, 4}};
int[,] b = { { 1, 1, 1, 1}, { 2, 2, 2, 2}, { 3, 3, 3, 3}, { 4, 4, 4, 4}};
public double SUM;
public void SetMas()
{
WriteMas(a);
WriteMas(b);
}
public void WriteMas(int[,] aa)
{
Console.WriteLine();
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
Console.Write("{0} ", aa[i, j]);
}
Console.WriteLine();
}
}
public void writestring1()
{
sem.Wait();
for (int i = 0; i <= 0; i++)
{
for (int j = 0; j <= 3; j++)
{
c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j];
}
}
sem.Release();
}
public void writestring2()
{
sem.Wait();
for (int i = 1; i <= 1; i++)
{
for (int j = 0; j <= 1; j++)
{
c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j];
}
}
sem.Release();
}
public void writestring3()
{
sem.Wait();
for (int i = 1; i <= 1; i++)
{
for (int j = 2; j <= 3; j++)
{
c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j];
}
}
sem.Release();
}
public void writestring4()
{
sem.Wait();
for (int i = 2; i <= 2; i++)
{
for (int j = 0; j <= 1; j++)
{
c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j];
}
}
sem.Release();
}
public void writesthring5()
{
sem.Wait();
for (int i = 2; i <= 2; i++)
{
for (int j = 2; j <= 3; j++)
{
c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j];
}
}
sem.Release();
}
public void writestring6()
{
sem.Wait();
for (int i = 3; i <= 3; i++)
{
for (int j = 0; j <= 1; j++)
{
c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j];
}
}
sem.Release();
}
public void writestring7()
...